from jsonpath import jsonpath
from loguru import logger


def handle_assert(act_res, exp_res):
    """

    :param act_res:实际请求响应结果
    :param exp_res:excel读取"expected_results"一栏数据
    :return:最终返回断言结果：True or  False
    """
    # 判断实际结果数据和从excel里面读取的预期结果数据是否存在，存在则进行下一步
    if act_res and exp_res:
        # logger.info(f"exp_res的数据类型为:{type(exp_res)}")
        exp_res_data = eval(exp_res)
        logger.info(f"转化后的预期结果数据为:{exp_res_data}")
        # 遍历预取结果数据列表，分别提取对应的实际结果数据
        for exp_res_one in exp_res_data:
            actual_list = jsonpath(act_res, exp_res_one["expression"])
            # logger.info(f"分别提取的实际结果数据列表为:{actual_list}")
            logger.info(f"实际结果为:{actual_list[0]}")
            logger.info(f'预期结果为:{exp_res_one["expected"]}')
            if exp_res_one["compare_type"] == "==":
                try:
                    assert actual_list[0] == exp_res_one["expected"]
                    logger.info("对比成功")
                except:
                    logger.info("断言失败，实际结果和预期结果不相等")
                    return False
        return True

    else:
        logger.exception(f"请检查实际结果:{act_res}或者excel里面读取数据:{exp_res}数据是否正常")


# 实际结果： act_res

if __name__ == '__main__':
    if __name__ == '__main__':
        # act_res = {
        #     "code": 2,
        #     "msg": "OK",
        #     "data": {
        #         "id": 820124,
        #         "reg_name": "wzq",
        #         "leave_amount": 1470.12
        #     },
        #     "copyright": "Copyright 柠檬班 © 2017-2019 湖南省零檬信息技术有限公司 All Rights Reserved"
        # }

        # act_res = None
        #
        # exp_res = """[
        #     {"expression": "$..code", "expected": 2, "compare_type": "=="},
        #     {"expression": "$..msg", "expected": "OK", "compare_type": "=="},
        #     {"expression": "$..reg_name", "expected": "wzq", "compare_type": "=="},
        #     {"expression": "$..leave_amount", "expected": 1470.124, "compare_type": "=="}]"""
        #
        # print(handle_assert(act_res, exp_res))

        act_res = {'code': '0', 'msg': '操作成功', 'data': '352592'}

        exp_res = '''[{'expression': '$.code', 'expected': 0, 'compare_type': '=='}, {'expression': '$.msg', 'expected': '操作成功', 'compare_type': '=='}]'''
        # handle_assert(act_res,exp_res)
        print(type(act_res['code']))
        a = eval(exp_res)
        print(type(a[0]['expected']))
